.TH MACH-O 5 "October 22, 2001" "Apple Computer, Inc."
.SH NAME
Mach-O \- Mach-O assembler and link editor output
.SH SYNOPSIS
.nf
.B #include <mach-o/loader.h>
.B #include <mach-o/nlist.h>
.B #include <mach-o/stab.h>
.B #include <mach-o/reloc.h>
.fi
.SH DESCRIPTION
The object files produced by the assembler and link editor are in Mach-O
(Mach object) file format.
The file name
.I a.out
is the default output file name of the assembler
.IR as (1)
and the link editor
.IR ld (1)
.
The format of the object file however is not 4.3BSD a.out format as the
name suggests, but rather Mach-O format.
The link editor will make
.I a.out
executable if the resulting format is an executable type and there were no
errors and no unresolved external references.
.PP
The complete description of a Mach-O file is given in a number of include files.
The file <mach-o/loader.h> describes the headers, <mach-o/nlist.h> describes
the symbol table entries with <mach-o/stab.h> supplementing it,
and <mach-o/reloc.h> describes the relocation entries.
.PP
The actual instructions and data used by the program represented by a Mach-O
file are the contents of its sections.  Sections are grouped together in
segments.  Each section carries with it, in its header, the information as to
which segment it belongs in.  When a file type that is executable is created
the sections are placed in their proper segment and all the segment headers are
created and the segments themselves are padded out to the segment alignment
(typically the target pagesize).  For the object file type produced by an
assembler (or by the link editor for further linking) all the sections are
placed in one segment for compactness.
.PP
When the kernel executes a Mach-O file it maps in the object file's segments,
the dynamic link editor (if used) and creates the thread(s) for execution.  Any
part of the object file that is not part of a segment is not mapped in for
execution.  For executable using the dynamic link editor the headers and other
link edit information is needed to execute the file.  These parts include the
relocation entries, the symbol table and the string table.  These parts are
mapped in with the use of the link editor's
.B \-seglinkedit
option which creates a segment that contains these parts.
These parts can be stripped down with the
.B \-S
option to 
.IR ld (1)
or various options to
.IR strip (1).
.PP
.SH "SEE ALSO"
as(1), ld(1), nm(1), gdb(1), stab(5), strip(1)
